Apache CXF 使用 - 04 -简介 - 如何开发一个服务的客户端
WSDL2Java 生成客户端代码
最常见的情景是你有一个你能够或不能够管理的服务,且此服务有一个WSDL文件。在这种情况下需要从WSDL生成客户端(client),这为你提供了一个与服务交互的强类型的接口。一旦生成客户端代码,最典型的应用是:
|
WSDL2Java 工具可以从WSDL生成JAX-WS客户端代码. WSDL2java有三种运行方式:
- 命令行
- Maven Plugin - 推荐
- WSDL2Java API
更多信息查看 Developing a JAX-WS consumer
JAX-WS Proxy
除了直接使用wsdl2java生成的客户端存根(stub client),也可以使用Service.create
来创建Service
的实例。下述代码说明了此过程:
|
JAX-WS Dispatch APIs
JAX-WS 提供了一种“dispatch”(派遣、调度)机制来使没有生成客户端代码的服务的动态调用更加简单。使用Dispatch 机制你可以创建消息 (消息可以是 JAXB 对象, Source 对象, 或 SAAJ Message) ,并将它们调度到服务器( dispatch them to the server).例如:
|
注:也可以在没有WSDL的情况下使用dispatch。
Simple Frontend Client Proxy
如果使用 simple frontend开发了一个服务,你可以使用 ClientProxyFactoryBean 的API 来为你的服务创建一个java代理客户端 . 这样,你就可以使用服务接口与你的服务进行对话. 参考 Simple Frontend.
动态客户端 Dynamic Client
CXF包含一个允许你激活操作和为操作传递参数的客户端接口。例如:
|
有两种方式在运行时创建Clients .第一种是使用 ClientFactoryBean
或 JaxWsClientFactoryBean
类. 这将为服务SEI(service endpoint interface)创建一些代理对象. 注意,这些代理不能够处理复杂对象.
第二种是使用DynamicClientFactory
或其子类。DynamicClientFactory
进一步为WSDL中描述的复杂对象生成和编译JAXB POJO,在运行时通过反射使用。
这在你将CXF与动态语言,如Groovy,一起使用时特别有用 ,但直接从java中使用反射也是可以的.
更多信息参考: Dynamic Clients